Ohne Kontrollstrukturen läuft ein Programm einfach der Reihe nach die Anweisungen ab, ohne eine große Logik dahinter zu haben. Doch was, wenn man Teile des Codes nicht immer ausführen möchte oder einen gewissen Teil ganz oft? Ein Programm ohne Kontrollstrukturen sähe z.B. so aus:
Doch was, wenn wir zum Beispiel z
nur dann ausgeben wollen, wenn x
größer als 80 ist? Oder z
so oft ausgeben, wie y
groß ist?
Darum gibt es die Kontrollstrukturen. Sie erlauben es einem, den linearen Programmablauf mit Bedingungen und Schleifen zu bestücken.
Mittels Verzweigungen können Bedingungen realisiert werden:
Ein if
mit einem (
)
Klammerpaar dahinter signalisiert eine solche Bedingung: Wenn die Bedingung in den Klammern true
zurückgibt, dann wird der Code
in den {
}
geschweiften Klammern ausgeführt, ansonsten nicht. In dem Beispiel über diesem Text würde also nichts in die Konsole ausgegeben werden, da
(12 > 4)
keine wahre Aussage ist.
Wenn man Code ausführen möchte, wenn die bei if
angegebene Bedingung false
ist, kann man ein else
hinter die }
schließende geschweifte Klammer des if
s schreiben:
Hier würde nun x ist kleiner oder gleich 4!
ausgegeben werden, da die Bedingung false
ist.
Doch nicht einfach nur ein else
ist möglich, auch mehrere aufeinander folgende else if
s sind möglich (auch mit abschließendem else
):
Hierbei würde nun x ist gleich 4!
ausgegeben werden, da die erste Bedingung (x > 4
) false
ist, die Zweite (x == 4
) aber true
. Damit wird der else
-Zweig
ganz am Ende übersprungen.
Wenn man ganz viele verschiedene Bedingungen abfragen muss, können die vielen else if
s schnell unübersichtlich werden. Darum gibt es switch
statements:
Man gibt ihr eine Variable und kann dann beliebig viele Zustände von dieser abfragen, ohne sie bei jedem Vergleich zu nennen.
In diesem Beispiel würde x ist 3
ausgegeben werden. Warum?
Man gibt oben, nach dem switch
, in den Klammern die zu überprüfende Variable an. Hier ist es x
mit dem Wert 3.
In den {
}
geschweiften Klammern dahinter kommen dann die verschiedenen Fälle, also case
s. Man schreibt für jeden zu prüfenden Fall ein solches Konstrukt:
Wenn das Programm einen case
findet, bei dem der Wert von der nach switch
genannten Variable dem WERT
hinter dem case
entspricht, führt es den Code aus, der hinter
dem :
steht. Am Ende eines case
s muss immer break;
stehen, um das switch
statement zu verlassen.
Es können allerdings auch mehrere case
s hintereinander geschrieben werden und wenn egal welche dieser Bedingungen zutrifft, wird der Code dahinter ausgeführt.
Hier würde x ist 1, 3 oder 8
ausgegeben werden, da das zweite Label case 3:
zutrifft und damit der Code hinter den case
s ausgeführt wird.
Einstufige Verzweigungen erlauben es einem also Entscheidungen zu treffen und basierend darauf Code auszuführen oder zu überspringen.
Doch man kann nicht einfach nur ein if
haben und fertig - es können beliebig viele socher Kontrollstrukturen ineinander platziert werden:
Nun fehlen von den Kontrollstrukturen nur noch die Schleifen, diese werden aber auf der nächsten Seite erklärt.
Frage 1
Was für Anweisungen kennst du jetzt, mit denen man Verzweigungen erstellen kann?
Frage 2
Wie viele Verzweigungen kann man ineinander platzieren?
Frage 3
Erkläre die Syntax des Switch-Statements mit deinen eigenen Worten und überprüfe es mit der Erklärung oben!
Frage 4
Was würde in dem Beispiel mit den verschachtelten Verzweigungen ausgegeben werden, wenn x = 9
und y = 14
?
Frage 5
Erstelle eine verschachtelte Verzweigung mit mindestens einem if
, else if
, else
und switch
!